home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 March / Macworld (1998-03) (Disk 1).dmg / Shareware World / Utilities / Text Processing / Alpha / Tcl / Modes / HTML and CSS Modes / htmlMenu.tcl < prev    next >
Encoding:
Text File  |  1997-11-02  |  31.5 KB  |  963 lines  |  [TEXT/ALFA]

  1. ## -*-Tcl-*-
  2.  # ###################################################################
  3.  #  HTML mode - tools for editing HTML documents
  4.  # 
  5.  #  FILE: "htmlMenu.tcl"
  6.  #                                    created: 96-04-29 21.31.40 
  7.  #                                last update: 97-10-31 22.02.16 
  8.  #  Author: Johan Linde
  9.  #  E-mail: <jl@theophys.kth.se>
  10.  #     www: <http://bach.theophys.kth.se/~jl/Alpha.html>
  11.  #  
  12.  # Version: 2.0.3
  13.  # 
  14.  # Copyright 1996, 1997 by Johan Linde
  15.  #  
  16.  # This software may be used freely, and distributed freely, as long as the 
  17.  # receiver is not obligated in any way by receiving it.
  18.  #  
  19.  # If you make improvements to this file, please share them!
  20.  # 
  21.  # ###################################################################
  22.  ##
  23.  
  24. proc htmlMenu.tcl {} {}
  25.  
  26. # Loading of packages.
  27. proc htmlHTML3.2andCSS {} {htmlLoadPackage 3}
  28. proc htmlExtensions {} {htmlLoadPackage 1}
  29.  
  30. proc htmlLoadPackage {level} {
  31.     global htmlPackageToUse
  32.     global HTMLmodeVars modifiedModeVars 
  33.  
  34.     if {$level != $htmlPackageToUse} {    
  35.         set HTMLmodeVars(htmlPackageToUse) $level
  36.         set htmlPackageToUse $level
  37.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  38.         if {$htmlPackageToUse == 1} {
  39.             htmlExtensions.tcl
  40.             htmlDisableSome 3 on
  41.             htmlMarkExtUtil
  42.             message "Extensions"
  43.         } else {
  44.             html32.tcl
  45.             htmlMark32Util
  46.             message "HTML 3.2"
  47.         }
  48.         htmlDisMark
  49.     }
  50. }
  51.  
  52. proc htmlMarkExt {} {
  53.     markMenuItem -m {Packages} {Extensions} 1 
  54.     markMenuItem -m {Packages} {HTML 3.2 and CSS} 0
  55. }
  56.  
  57. proc htmlMarkExtUtil {} {
  58.     global htmlUtilsMenu htmlElemKeyBinding htmlAdditionExist htmlShownWarning
  59.     enableMenuItem $htmlUtilsMenu Extend [expr ![info exists htmlShownWarning]]
  60.     htmlEnableExtend [info exists htmlElemKeyBinding] $htmlAdditionExist
  61. }
  62.  
  63. proc htmlMark32 {} {
  64.     markMenuItem -m {Packages} {Extensions} 0
  65.     markMenuItem -m {Packages} {HTML 3.2 and CSS} 1 
  66. }
  67.  
  68. proc htmlMark32Util {} {
  69.     global htmlUtilsMenu
  70.     enableMenuItem $htmlUtilsMenu Extend off
  71. }
  72.  
  73. # Hide and show Netscape and IE.
  74. proc htmlHideNetscapeOnly {} {htmlHide Netscape}
  75. proc htmlHideIEOnly {} {htmlHide IE}
  76.  
  77. proc htmlHide {what} {
  78.     global htmlDisabledItems1 htmlDisabledNetscape htmlDisabledIE HTMLmodeVars modifiedModeVars
  79.     
  80.     htmlDisableSome 1 on
  81.     set HTMLmodeVars(hide${what}) [expr ![set HTMLmodeVars(hide${what})]]
  82.     lappend modifiedModeVars [list hide$what HTMLmodeVars]
  83.     markMenuItem -m Packages "Hide $what Only" [set HTMLmodeVars(hide${what})] 
  84.     htmlSetDis1
  85.     htmlDisableSome 1 off
  86.     message "[lindex {Show Hide} [set HTMLmodeVars(hide${what})]] $what only."
  87. }
  88.  
  89. # Disable some HTML elements    
  90. proc htmlDisableSome {num onoff} {
  91.     global htmlElemKeyBinding htmlDisabledItems3 htmlDisabledItems1 htmlMenu
  92.     foreach i [set htmlDisabledItems$num] {
  93.         set it [split $i /]
  94.         enableMenuItem [lindex $it 0] [lindex $it 1] $onoff
  95.     }
  96.     # Disable Custom menu in HTML 3.2
  97.     if {[info exists htmlElemKeyBinding]} {enableMenuItem $htmlMenu Custom [expr $num == 1]}
  98. }
  99.  
  100. proc htmlUseBigBrother {} {
  101.     global HTMLmodeVars modifiedModeVars
  102.     set HTMLmodeVars(useBigBrother) [expr !$HTMLmodeVars(useBigBrother)]
  103.     if {[catch {nameFromAppl Bbth}]} {
  104.         set HTMLmodeVars(useBigBrother) 0
  105.         enableMenuItem {Check Links} {Use Big Brother} off
  106.     }
  107.     markMenuItem -m {Check Links} {Use Big Brother} $HTMLmodeVars(useBigBrother) 
  108.     lappend modifiedModeVars {useBigBrother HTMLmodeVars}
  109.     message "[lindex {"Don't use" Use} [set HTMLmodeVars(useBigBrother)]] Big Brother."
  110. }
  111.  
  112. proc htmlHideCSSAttributes {} {
  113.     global HTMLmodeVars modifiedModeVars
  114.     set HTMLmodeVars(hideStyleAttrs) [expr !$HTMLmodeVars(hideStyleAttrs)]
  115.     markMenuItem -m Packages "Hide CSS Attributes" $HTMLmodeVars(hideStyleAttrs) 
  116.     lappend modifiedModeVars {hideStyleAttrs HTMLmodeVars}
  117.     message "[lindex {Show Hide} [set HTMLmodeVars(hideStyleAttrs)]] CSS attributes."
  118. }
  119.  
  120. # Called from HTML menu to change browser.
  121. proc htmlToggleBrowser {brws} {
  122.     global htmlBrowsers browserSig modifiedVars
  123.     foreach b $htmlBrowsers {
  124.         if {$brws == [lindex $b 1]} {set browserSig [lindex $b 0]}
  125.     }
  126.     lappend modifiedVars browserSig
  127. }
  128.  
  129. # Called whenever browserSig is changed.
  130. proc htmlToggleBrowser2 {args} {
  131.     global browserSig htmlBrowsers HTMLmodeVars
  132.     if {[lsearch -exact $HTMLmodeVars(browsers) $browserSig] < 0} {htmlAddBrowser $browserSig}
  133.     foreach b $htmlBrowsers {
  134.         if {$browserSig == [lindex $b 0]} {
  135.             markMenuItem -m Browsers [lindex $b 1] on 
  136.         } else {
  137.             markMenuItem -m Browsers [lindex $b 1] off
  138.         }
  139.     }
  140. }
  141.  
  142. # Add a browser to Browser menu.
  143. proc htmlAddBrowser {{sig ""}} {
  144.     global htmlBrowsers HTMLmodeVars modifiedModeVars browserSig
  145.     if {$sig == ""} {
  146.         set fil [getfile "Locate a web browser."]
  147.         set sig [getFileSig $fil]
  148.     }
  149.     if {[catch {nameFromAppl $sig} fil]} {
  150.         alertnote "Couldn't get the name of the browser. If nothing else helps try rebuilding the desktop."
  151.         return
  152.     }
  153.     if {[lsearch -exact $HTMLmodeVars(browsers) $sig] >= 0} {return}
  154.     lappend HTMLmodeVars(browsers) $sig
  155.     lappend modifiedModeVars {browsers HTMLmodeVars}
  156.     lappend htmlBrowsers [list $sig [set app [file tail $fil]]]
  157.     htmlAddBrowserItem $app $sig
  158.     if {$sig == $browserSig} {markMenuItem -m "Browsers" $app on }
  159.     message "$app added to Browsers menu."
  160. }
  161.  
  162. # Remove a browser from Browser menu.
  163. proc htmlRemoveBrowser {} {
  164.     global htmlBrowsers HTMLmodeVars modifiedModeVars browserSig modifiedVars
  165.     foreach b $htmlBrowsers {
  166.         lappend tmp [lindex $b 1]
  167.     }
  168.     if {[catch {listpick -p "Select browser to remove" $tmp} brws] || $brws == ""} {return}
  169.     for {set i 0} {$i < [llength $htmlBrowsers]} {incr i} {
  170.         if {$brws == [lindex [lindex $htmlBrowsers $i] 1]} {
  171.             deleteMenuItem -m Browsers $brws
  172.             if {[lindex $HTMLmodeVars(browsers) $i] == $browserSig} {
  173.                 set j 0
  174.                 if {$i == 0} {incr j}
  175.                 if {$j < [llength $HTMLmodeVars(browsers)]} {set browserSig [lindex $HTMLmodeVars(browsers) $j]}
  176.                 lappend modifiedVars browserSig
  177.             }
  178.             set htmlBrowsers [lreplace $htmlBrowsers $i $i]
  179.             set HTMLmodeVars(browsers) [lreplace $HTMLmodeVars(browsers) $i $i] 
  180.         }
  181.     }
  182.     lappend modifiedModeVars {browsers HTMLmodeVars}
  183.     message "$brws removed from Browsers menu."
  184. }
  185.  
  186. proc htmlAddBrowserItem {app sig} {
  187.     switch $sig {
  188.         MOSS {
  189.             if {[string match "*Navigator*" $app]} {
  190.                 set ic 85
  191.             } else {
  192.                 set ic 86
  193.             }
  194.         }
  195.         MSIE {set ic 87}
  196.         OlG1 {set ic 88}
  197.         dogz {set ic 73}
  198.         default {set ic 78}
  199.     }
  200.     addMenuItem -m Browsers [menu::itemWithIcon $app $ic]
  201. }
  202.  
  203.  
  204. proc htmlEnableURLs {onoff} {
  205.     enableMenuItem URLs "Clean Up…" $onoff
  206.     enableMenuItem URLs "Clear" $onoff
  207.     enableMenuItem URLs "Export…" $onoff
  208. }
  209.  
  210. proc htmlEnablewindows {onoff} {
  211.     global htmlUtilsMenu
  212.     enableMenuItem $htmlUtilsMenu Windows $onoff
  213. }
  214.  
  215. proc htmlEnableExtend {a b} {
  216.     enableMenuItem Extend "Change Key Binding…" $a
  217.     enableMenuItem Extend "Change Type and Layout…" $a
  218.     enableMenuItem Extend "Remove Attributes…" $b
  219.     enableMenuItem Extend "Remove Additions…" $b
  220. }
  221.  
  222. proc htmlUseAttrsIsEnabled {} {
  223.     global HTMLmodeVars
  224.     return [expr !$HTMLmodeVars(useBigWindows) || !$HTMLmodeVars(changeInBigWindows) || $HTMLmodeVars(useAttsApplyToDialogs)]
  225. }
  226.  
  227. # This proc is not used any more. It now gives a warning message if the user
  228. # call it to define new elements in HTMLprefs.tcl.
  229. proc htmlNewElemVar {{list ""} {var ""} {val ""}} {
  230.     global htmlShownWarning htmlUtilsMenu
  231.     if {![info exists htmlShownWarning]} {
  232.         beep
  233.         dialog -w 350 -h 290 -t "The way to add custom elements to HTML mode has changed."\
  234.         10 10 340 45 \
  235.         -t "New elements can now be added with the functions found in the submenu\
  236.         Extend in the HTML Utilities menu. However, this submenu is disabled until you remove all\
  237.         your definitions of custom elements from HTMLPrefs.tcl and restart Alpha."\
  238.         10 55 340 150\
  239.         -t "Read more in the section 'Extending HTML mode' in the\
  240.         HTML mode manual about how to avoid this message and how\
  241.         to add new elements to HTML mode." 10 160 340 250\
  242.         -b OK 20 260 85 280
  243.         set htmlShownWarning 1
  244.         enableMenuItem $htmlUtilsMenu Extend off
  245.     }
  246. }
  247.  
  248. proc htmlSetAttrUsed {num elem used} {
  249.     global htmlElemAttrUsed htmlElemAttrUsed3
  250.     if {![info exists htmlElemAttrUsed${num}($elem)]} {set htmlElemAttrUsed${num}($elem) $used}
  251. }
  252.  
  253.  
  254.  
  255. #===============================================================================
  256. # Character entities
  257. #===============================================================================
  258.  
  259. proc htmlNewCharVar {var val} {
  260.     global htmlSpecialCharacter
  261.     global htmlCharacterSpecial
  262.     set htmlSpecialCharacter($var) $val 
  263.     set htmlCharacterSpecial($val) $var
  264. }
  265.  
  266. proc htmlNewCapCharVar {var men val} {
  267.     global htmlSpecialCapCharacter
  268.     global htmlCapCharacterSpecial
  269.     global htmlCapCharSpecMenu
  270.     set htmlSpecialCapCharacter($var) $val 
  271.     set htmlCapCharacterSpecial($val) $var
  272.     set htmlCapCharSpecMenu($men) $val
  273. }
  274.  
  275. htmlNewCharVar "ß" szlig
  276. htmlNewCharVar "à" agrave
  277. htmlNewCharVar "á" aacute
  278. htmlNewCharVar "â" acirc
  279. htmlNewCharVar "ã" atilde
  280. htmlNewCharVar "ä" auml
  281. htmlNewCharVar "å" aring
  282. htmlNewCharVar "æ" aelig
  283. htmlNewCharVar "ç" ccedil
  284. htmlNewCharVar "è" egrave
  285. htmlNewCharVar "é" eacute
  286. htmlNewCharVar "ê" ecirc
  287. htmlNewCharVar "ë" euml
  288. htmlNewCharVar "ì" igrave
  289. htmlNewCharVar "í" iacute
  290. htmlNewCharVar "î" icirc
  291. htmlNewCharVar "ï" iuml
  292. htmlNewCharVar    "eth" eth
  293. htmlNewCharVar "ñ" ntilde
  294. htmlNewCharVar "ò" ograve
  295. htmlNewCharVar "ó" oacute
  296. htmlNewCharVar "ô" ocirc
  297. htmlNewCharVar "õ" otilde
  298. htmlNewCharVar "ö" ouml
  299. htmlNewCharVar "ø" oslash
  300. htmlNewCharVar "ù" ugrave
  301. htmlNewCharVar "ú" uacute
  302. htmlNewCharVar "û" ucirc
  303. htmlNewCharVar "ü"    uuml
  304. htmlNewCharVar "y´" yacute
  305. htmlNewCharVar "thorn" thorn
  306. htmlNewCharVar "ÿ"    yuml
  307.  
  308. htmlNewCapCharVar "À" "À" Agrave
  309. htmlNewCapCharVar "Á" "A´" Aacute
  310. htmlNewCapCharVar "Â" "A^" Acirc
  311. htmlNewCapCharVar "Ã" "Ã" Atilde
  312. htmlNewCapCharVar "Ä" "Ä" Auml
  313. htmlNewCapCharVar "Å" "Å" Aring
  314. htmlNewCapCharVar "Æ" "Æ" Aelig
  315. htmlNewCapCharVar "Ç" "Ç" Ccedil
  316. htmlNewCapCharVar "È" "E`" Egrave
  317. htmlNewCapCharVar "É" "É" Eacute
  318. htmlNewCapCharVar "Ê" "E^" Ecirc
  319. htmlNewCapCharVar "Ë" "E¨" Euml
  320. htmlNewCapCharVar "Ì" "I`" Igrave
  321. htmlNewCapCharVar "Í" "I´" Iacute
  322. htmlNewCapCharVar "Î" "I^" Icirc
  323. htmlNewCapCharVar "Ï" "I¨" Iuml
  324. htmlNewCapCharVar "ETH" "ETH" ETH
  325. htmlNewCapCharVar "Ñ" "Ñ" Ntilde
  326. htmlNewCapCharVar "Ò" "O`" Ograve
  327. htmlNewCapCharVar "Ó" "O´" Oacute
  328. htmlNewCapCharVar "Ô" "O^" Ocirc
  329. htmlNewCapCharVar "Õ" "Õ" Otilde
  330. htmlNewCapCharVar "Ö" "Ö" Ouml
  331. htmlNewCapCharVar "Ø" "Ø" Oslash
  332. htmlNewCapCharVar "Ù" "U`" Ugrave
  333. htmlNewCapCharVar "Ú" "U´" Uacute
  334. htmlNewCapCharVar "Û" "U^" Ucirc
  335. htmlNewCapCharVar "Ü" "Ü"    Uuml
  336. htmlNewCapCharVar "Y´" "Y´" Yacute
  337. htmlNewCapCharVar "THORN" "THORN" THORN
  338.  
  339. set htmlSpecialSymbCharacter(\")    quot
  340. set htmlSpecialSymbCharacter(ampersand) amp
  341. set htmlSpecialSymbCharacter([list less than]) lt
  342. set htmlSpecialSymbCharacter([list greater than]) gt
  343. set htmlSpecialSymbCharacter([list nonbreak space])    nbsp
  344. set htmlSpecialSymbCharacter(¡)    "#161"
  345. set htmlSpecialSymbCharacter(¢) "#162"
  346. set htmlSpecialSymbCharacter(£)    "#163"
  347. set htmlSpecialSymbCharacter(currency)    "#164"
  348. set htmlSpecialSymbCharacter(¥)    "#165"
  349. set htmlSpecialSymbCharacter(§) "#167"
  350. set htmlSpecialSymbCharacter(©)        copy
  351. set htmlSpecialSymbCharacter(ª)    "#170"
  352. set htmlSpecialSymbCharacter(«)    "#171"
  353. set htmlSpecialSymbCharacter(®)        reg
  354. set htmlSpecialSymbCharacter(°)    "#176"
  355. set htmlSpecialSymbCharacter(±) "#177"
  356. set htmlSpecialSymbCharacter(µ)    "#181"
  357. set htmlSpecialSymbCharacter(¶)    "#182"
  358. set htmlSpecialSymbCharacter(middot) "#183"
  359. set htmlSpecialSymbCharacter(º) "#186"
  360. set htmlSpecialSymbCharacter(») "#187"
  361. set htmlSpecialSymbCharacter([list a quarter]) "#188"
  362. set htmlSpecialSymbCharacter([list a half]) "#189"
  363. set htmlSpecialSymbCharacter([list three quarters]) "#190"
  364. set htmlSpecialSymbCharacter(¿)    "#191"
  365. set htmlSpecialSymbCharacter(times)    "#215"
  366. set htmlSpecialSymbCharacter(÷)    "#247"
  367.  
  368.  
  369. rename htmlNewCharVar ""
  370. rename htmlNewCapCharVar ""
  371.  
  372. #===============================================================================
  373. # Menu Processing
  374. #===============================================================================
  375.  
  376. proc htmlMenuItem {menu item} {
  377.     global htmlElemProc htmlDisabledItems1 htmlDisabledItems3 htmlPackageToUse
  378.     global screenWidth defWidth
  379.  
  380.     if {$htmlPackageToUse == 3 && $menu == "Custom"} {beep; return}
  381.     foreach it [set htmlDisabledItems$htmlPackageToUse] {
  382.         if {[lindex [split $it /] 1] == $menu || "${menu}/$item" == $it} {beep; return}
  383.     }
  384.     
  385.     switch -glob $menu {
  386.         "•*" {
  387.             switch $item {
  388.                 "Use Attributes" {
  389.                     if {![htmlUseAttrsIsEnabled]} {beep; return}
  390.                     htmlChooseUseAttr
  391.                 }
  392.                 "Last Modified"     {htmlInsertLastMod}
  393.                 default {eval html[join $item ""]}
  394.             }
  395.         }
  396.         "Browsers" {
  397.             switch $item {
  398.                 "Send File to Browser"    {htmlSendWindow}
  399.                 "Add"    {htmlAddBrowser}
  400.                 "Remove" {htmlRemoveBrowser}
  401.                 default {htmlToggleBrowser $item}
  402.             }
  403.         }
  404.         "Packages"    {eval html[join $item ""]}
  405.         "Preferences" {HTMLmodifyFlags [lindex $item 0]}
  406.         "Palettes" {float -m "$item" -t 50 -l [expr $screenWidth - $defWidth > 110 ? $defWidth : $screenWidth - 110] -z HTML} 
  407.         "Editing" {
  408.             switch $item {
  409.                 "Literal Tab"    {replaceText [getPos] [selEnd] "\t"}
  410.                 default {eval html[join $item ""]}
  411.             }
  412.         }
  413.         "Validate" {eval html[join $item ""]}
  414.         "Character Translation"    {
  415.             switch $item {
  416.                 "åäö -> HTML"        {htmlCharacterstohtml 0}
  417.                 "HTML -> åäö"    {htmltoCharacters 0}
  418.                 "<>& -> HTML"    {htmlCharacterstohtml 1}
  419.                 "HTML -> <>&"    {htmltoCharacters 1}
  420.                 default {eval html[join $item ""]}
  421.             }
  422.         }
  423.         "URLs"    {
  424.             switch $item {
  425.                 "Clean Up"        {htmlCleanUpCache URLs}
  426.                 "Clear"            {htmlClearCache URLs}
  427.                 default {eval html[join $item ""]}
  428.             }
  429.         }
  430.         "Windows"    {
  431.             switch $item {
  432.                 "Clean Up"    {htmlCleanUpCache windows}
  433.                 "Clear"        {htmlClearCache windows}
  434.                 default {eval html[join $item ""]}
  435.             }
  436.         }
  437.         "Check Links" {eval html[join $item ""]}
  438.         "Includes" {eval html[join $item ""]}
  439.         "Home Page Windows" {
  440.             switch $item {
  441.                 "Open" {htmlOpenHPwin}
  442.                 default {eval html[join $item ""]}
  443.             }
  444.         }
  445.         "Extend" {eval html[join $item ""]}
  446.         "Style Sheets" {
  447.             switch $item {
  448.                 Style {htmlTag {htmlBuildCR2Elem STYLE}}
  449.                 Span {htmlTag {htmlBuildElem SPAN}}
  450.                 Import {cssDialog @import}
  451.                 Display {cssDialog Display}
  452.                 default {
  453.                     if {[info commands html[join $item ""]] != ""} {
  454.                         eval html[join $item ""]
  455.                     } else {
  456.                         cssDialog [join [string tolower $item] -]}
  457.                     }
  458.             }
  459.         }
  460.         "Headers" {
  461.             switch $item {
  462.                 "Header1"    {htmlTag {htmlBuildCRElem H1 1}}
  463.                 "H1 no attr" {htmlTag {htmlBuildCRElem H1 1 NOATTR}}
  464.                 "Header2"    {htmlTag {htmlBuildCRElem H2 1}}
  465.                 "H2 no attr" {htmlTag {htmlBuildCRElem H2 1 NOATTR}}
  466.                 "Header3"    {htmlTag {htmlBuildCRElem H3 1}}
  467.                 "H3 no attr" {htmlTag {htmlBuildCRElem H3 1 NOATTR}}
  468.                 "Header4"    {htmlTag {htmlBuildCRElem H4 1}}
  469.                 "H4 no attr" {htmlTag {htmlBuildCRElem H4 1 NOATTR}}
  470.                 "Header5"    {htmlTag {htmlBuildCRElem H5 1}}
  471.                 "H5 no attr" {htmlTag {htmlBuildCRElem H5 1 NOATTR}}
  472.                 "Header6"    {htmlTag {htmlBuildCRElem H6 1}}
  473.                 "H6 no attr" {htmlTag {htmlBuildCRElem H6 1 NOATTR}}
  474.                 default {eval html[join $item ""]}
  475.             }
  476.         }
  477.         "Blocks and Dividers" {
  478.             switch $item {
  479.                 "Paragraph"    {htmlElemParagraph}
  480.                 "P no attr" {htmlElemParagraph NOATTR}
  481.                 "Division"        {htmlTag {htmlBuildCR2Elem DIV}}
  482.                 "Block Quote"    {htmlTag {htmlBuildCR2Elem BLOCKQUOTE}}
  483.                 "Address"        {htmlTag {htmlBuildCRElem ADDRESS}}
  484.                 "Center"        {htmlTag {htmlBuildCR2Elem CENTER}}
  485.                 "Preformatted"    {htmlTag {htmlBuildCR2Elem PRE}}
  486.                 "Multi Column"    {htmlTag {htmlBuildCR2Elem MULTICOL}}
  487.                 "Spacing"        {htmlTag {htmlBuildOpening SPACER}}
  488.                 "Line Break"        {htmlTag {htmlBuildOpening BR 0 1}}
  489.                 "BR no attr"        {htmlTag {htmlBuildOpening BR 0 1 NOATTR}}
  490.                 "Horizontal Rule"    {htmlTag {htmlBuildOpening HR 1 1}}
  491.                 "HR no attr"    {htmlTag {htmlBuildOpening HR 1 1 NOATTR}}
  492.                 "No Line Break"    {htmlTag {htmlBuildElem NOBR}}
  493.                 "Word Break"    {htmlTag {htmlBuildOpening WBR 0 1}}
  494.                 default {eval html[join $item ""]}
  495.             }
  496.         }
  497.         "Styles"    {
  498.             switch $item {
  499.                 "Font"            {htmlTag {htmlBuildElem FONT}}
  500.                 "Basefont"        {htmlTag {htmlBuildOpening BASEFONT 1 1}}
  501.                 "Marquee"        {htmlTag {htmlBuildCRElem MARQUEE}}
  502.                 "Bold"            {htmlTag {htmlBuildElem B}}
  503.                 "Italic"        {htmlTag {htmlBuildElem I}}
  504.                 "Strike out"    {htmlTag {htmlBuildElem STRIKE}}
  505.                 "Underlined"    {htmlTag {htmlBuildElem U}}
  506.                 "Subscript"        {htmlTag {htmlBuildElem SUB}}
  507.                 "Superscript"    {htmlTag {htmlBuildElem SUP}}
  508.                 "Bigger"        {htmlTag {htmlBuildElem BIG}}
  509.                 "Smaller"        {htmlTag {htmlBuildElem SMALL}}
  510.                 "Emphasis"        {htmlTag {htmlBuildElem EM}}
  511.                 "Strong"        {htmlTag {htmlBuildElem STRONG}}
  512.                 "Definition"    {htmlTag {htmlBuildElem DFN}}
  513.                 "Code"            {htmlTag {htmlBuildElem CODE}}
  514.                 "Variable"        {htmlTag {htmlBuildElem VAR}}
  515.                 "Citation"        {htmlTag {htmlBuildElem CITE}}
  516.                 "Keyboard"        {htmlTag {htmlBuildElem KBD}}
  517.                 "Typewriter"    {htmlTag {htmlBuildElem TT}}
  518.                 "Sample"        {htmlTag {htmlBuildElem SAMP}}
  519.                 "Blinking"        {htmlTag {htmlBuildElem BLINK}}
  520.                 default {eval html[join $item ""]}
  521.             }
  522.         }
  523.         "Links"    {
  524.             switch $item {
  525.                 "Link or Anchor" {htmlTag {htmlBuildElem A}}
  526.                 "Image"    {htmlTag {htmlBuildOpening IMG}}
  527.                 Object {htmlTag {htmlBuildCR2Elem OBJECT}}
  528.                 Sound {htmlTag {htmlBuildOpening BGSOUND 1 1}}
  529.                 default {eval html[join $item ""]}
  530.             }
  531.         }
  532.         "Plug-ins" {
  533.             switch $item {
  534.                 "General" {htmlTag {htmlBuildOpening EMBED}}
  535.                 "LiveAudio" {htmlTag {htmlBuildOpening EMBED 0 0 LIVEAUDIO}}
  536.                 "LiveVideo" {htmlTag {htmlBuildOpening EMBED 0 0 LIVEVIDEO}}
  537.                 "QuickTime Movie" {htmlTag {htmlBuildOpening EMBED 0 0 "QUICKTIME MOVIE"}}
  538.                 "QuickTime VR" {htmlTag {htmlBuildOpening EMBED 0 0 "QUICKTIME VR"}}
  539.                 "RealAudio"    {htmlTag {htmlBuildOpening EMBED 0 0 REALAUDIO}}
  540.                 "No Embed" {htmlTag {htmlBuildCR2Elem NOEMBED}}
  541.                 default {eval html[join $item ""]}
  542.             }
  543.         }
  544.         "Lists"    {
  545.             switch $item {
  546.                 "Bulleted"    {htmlTag {htmlBuildList UL "LI IN UL" UL}}
  547.                 "UL no attr"    {htmlTag {htmlBuildList UL NOATTR NOATTR}}
  548.                 "New Bulleted Item" {htmlTag {htmlBuildListEntry "LI IN UL"}}
  549.                 "Numbered"    {htmlTag {htmlBuildList OL "LI IN OL" OL}}
  550.                 "OL no attr"    {htmlTag {htmlBuildList OL NOATTR NOATTR}}
  551.                 "New Numbered Item" {htmlTag {htmlBuildListEntry "LI IN OL"}}
  552.                 "Directory"    {htmlTag {htmlBuildList DIR LI}}
  553.                 "Menu"        {htmlTag {htmlBuildList MENU LI}}
  554.                 "New List Item"    {htmlTag {htmlBuildListEntry LI}}
  555.                 "Discursive"    {htmlTag {htmlBuildList DL}}
  556.                 default {eval html[join $item ""]}
  557.             }
  558.         }
  559.         "Forms" {
  560.             switch $item {
  561.                 "Form"        {htmlTag {htmlBuildCR2Elem FORM}}
  562.                 "Text"        {htmlTag {htmlBuildInputElem TEXT}}
  563.                 "Checkbox"    {htmlTag {htmlBuildInputElem CHECKBOX}}
  564.                 "Button"    {htmlTag {htmlBuildInputElem BUTTON}}
  565.                 "Radio"        {htmlTag {htmlBuildInputElem RADIO}}
  566.                 "Submit"        {htmlTag {htmlBuildInputElem SUBMIT}}
  567.                 "Reset"        {htmlTag {htmlBuildInputElem RESET}}
  568.                 "Password"    {htmlTag {htmlBuildInputElem PASSWORD}}
  569.                 "Hidden"        {htmlTag {htmlBuildInputElem HIDDEN}}
  570.                 "Image"        {htmlTag {htmlBuildInputElem IMAGE}}
  571.                 "File Upload" {htmlTag {htmlBuildInputElem FILE}}
  572.                 "Select"        {htmlTag {htmlBuildCR2Elem SELECT}}
  573.                 "Option"        {htmlTag {htmlBuildOpening OPTION 1 1}}
  574.                 "Textarea"    {htmlTag {htmlBuildCRElem TEXTAREA}}
  575.                 "Key Generator" {htmlTag {htmlBuildOpening KEYGEN 1 1}}
  576.                 default {eval html[join $item ""]}
  577.             }
  578.         }
  579.         "Tables" {
  580.             switch $item {
  581.                 Table    {htmlTag {htmlBuildCR2Elem TABLE}}
  582.                 Row        {htmlTag {htmlBuildCR2Elem TR}}
  583.                 "TR no attr"        {htmlTag {htmlBuildCR2Elem TR NOATTR}}
  584.                 Header        {htmlTag {htmlBuildElem TH}}
  585.                 "TH no attr"        {htmlTag {htmlBuildElem TH NOATTR}}
  586.                 Cell        {htmlTag {htmlBuildElem TD}}
  587.                 "TD no attr"        {htmlTag {htmlBuildElem TD NOATTR}}
  588.                 Caption    {htmlTag {htmlBuildCRElem CAPTION}}
  589.                 Head {htmlTag {htmlBuildOpening THEAD 1 1}}
  590.                 Body {htmlTag {htmlBuildOpening TBODY 1 1}}
  591.                 Foot {htmlTag {htmlBuildOpening TFOOT 1 1}}
  592.                 "Column Group" {htmlTag {htmlBuildOpening COLGROUP 1 1}}
  593.                 Column {htmlTag {htmlBuildOpening COL 1 1}}
  594.                 default {eval html[join $item ""]}
  595.             }
  596.         }
  597.         "Frames" {
  598.             switch $item {
  599.                 Frameset        {htmlTag {htmlBuildCR2Elem FRAMESET}}
  600.                 Frame        {htmlTag {htmlBuildOpening FRAME 1 1}}
  601.                 "Inline Frame" {htmlTag {htmlBuildElem IFRAME}}
  602.                 "No Frames"    {htmlTag {htmlBuildCR2Elem NOFRAMES}}
  603.                 default {eval html[join $item ""]}
  604.             }
  605.         }
  606.         "Image Maps" {
  607.             switch $item {
  608.                 Map        {htmlTag {htmlBuildCR2Elem MAP}}
  609.                 Area    {htmlTag {htmlBuildOpening AREA 1 1}}
  610.                 default {eval html[join $item ""]}
  611.             }
  612.         }
  613.         "Java and JavaScript"    {
  614.             switch $item {
  615.                 Applet    {htmlTag {htmlBuildCR2Elem APPLET}}
  616.                 Parameter {htmlTag {htmlBuildOpening PARAM 1 1}}
  617.                 Script    {htmlTag {htmlBuildCR2Elem SCRIPT}}
  618.                 "No Script" {htmlTag {htmlBuildCR2Elem NOSCRIPT}}
  619.                 default {eval html[join $item ""]}
  620.             }
  621.         }
  622.         "Layers" {
  623.             switch $item {
  624.                 Layer {htmlTag {htmlBuildCR2Elem LAYER}}
  625.                 "Inline Layer" {htmlTag {htmlBuildCRElem ILAYER}}
  626.                 "No Layer" {htmlTag {htmlBuildCR2Elem NOLAYER}}
  627.                 default {eval html[join $item ""]}
  628.             }
  629.         }
  630.         "Other"    {
  631.             switch $item {
  632.                 "Base"    {htmlTag {htmlBuildOpening BASE 1 1}}
  633.                 "Isindex" {htmlTag {htmlBuildOpening ISINDEX 1 1}}
  634.                 "Link"    {htmlTag {htmlBuildOpening LINK 1 1}}
  635.                 "Meta"    {htmlTag {htmlBuildOpening META 1 1}}
  636.                 default {eval html[join $item ""]}
  637.             }
  638.         }
  639.         "Character Entities"    {
  640.             switch $item {
  641.                 "Add"    {htmlAddCommonChars}
  642.                 "Default" {htmlDefaultCommonChars}
  643.                 "Clear"    {htmlClearCommonChars}
  644.                 default        {htmlInsertCharacter $item}
  645.             }
  646.         }
  647.         "*Chars" {
  648.             htmlInsertCharacter $item
  649.         }
  650.         "Custom"    {
  651.             htmlTag $htmlElemProc([string toupper $item])
  652.         }
  653.     }
  654. }
  655.  
  656.  
  657. # Variables defining the sub menus. More variables in hctsmslMenu.tcl
  658.  
  659. set htmlHTMLSub {{"<I/t" "Help"} {"<B/m" "Use Attributes…"} {"<B<U<I/D" "New Document…"}}
  660.  
  661. set htmlBrowsersSub {{"<U<O/S" "Send File to Browser"} "(-" {"" "Add…"} {"" "Remove…"} "(-"}
  662.  
  663. set htmlPackagesSub {{"" "HTML 3.2 and CSS"} {"" Extensions} "(-" {"" "Hide CSS Attributes"} 
  664.     {"" "Hide Netscape Only"} {"" "Hide IE Only"}}
  665.  
  666. set htmlPreferencesSub {{"" "General…"} {"" "Indentation…"} {"" "JavaScript and CSS…"}
  667.     {"" "Checking Links…"} {"" "Word Wrapping…"}}
  668.     
  669. set htmlUtilitiesSub {{"" "Colors…"} {"" "Home Pages…"} {"" "Footers…"} {"" "Key Bindings…"}
  670.     {"<O/I" "Reformat Paragraph/Reformat Document"} {"" "Save to FTP Server/Forget Passwords"} {"" "Move Files…"} {"" "Last Modified…"} {"" "Document Size"} {"" "Document Index…"}}
  671.  
  672. set htmlEditingSub {{"<O/B" "Select Container/Select Opening"}
  673.     {"<U<O/B" "Select in Container"}
  674.     {"<B/e" "Untag/Untag and Select"} {"<B/f" "Remove Opening"}
  675.     {"<B/g" "Change Container…/Change Opening…"} {"<B/h" "Change Choice"}
  676.     {"<B/i" "Reveal Color"} {"<B/j" "Insert Attributes"} {"" "Quote All Attributes"} "(-" {"<O/c" "Word Complete"} {"/c" "Next Tab Mark"}
  677.     {"<U/c" "Previous Tab Mark"} {"<I/c" "Literal Tab"} {"<B/c" "Remove Marks"} {"" "Remove Tags"}}
  678.  
  679. set htmlValidateSub {{"" "Find Unbalanced Tags"} {"" "Check Tags"}}
  680.  
  681. set htmlCharacterSub {{"" "åäö -> HTML"} {"" "HTML -> åäö"}}
  682.  
  683. set htmlURLsSub {{"" "Clean Up…"} {"" "Clear"} {"" "Import…"} {"" "Export…"} {"" "Add Folder…"}
  684.     {"" "Add Selection"} {"" "Add Clipboard"}}
  685.  
  686. set htmlWindowsSub {{"" "Clean Up…"} {"" "Clear"}}
  687.  
  688. set htmlCheckSub {{"" "Check Window"} {"" "Check Home Page…"} {"" "Check Folder…"} {"" "Check File…"}
  689.     {"" "Check Remote Links"} "(-" {"" "Use Big Brother"}}
  690.  
  691. set htmlIncludesSub {{"" "Insert Include Tags…"} "(-" {"" "Update Window"} {"" "Update Home Page…"}
  692.     {"" "Update Folder…"} {"" "Update File…"}}
  693.  
  694. set htmlHomeSub {{"" Open…} {"<U<O/V" "Paste URL"} {"" "Refresh Windows"}}
  695.  
  696. set htmlExtendSub {{"" "New Element…"} {"" "New Attributes…"} {"" "New Choices…"} {"" "Change Key Binding…"}
  697.     {"" "Change Type and Layout…"} {"" "Remove Attributes…"} {"" "Remove Additions…"}}
  698.  
  699. set htmlUtilSubMenus {Utilities Editing Validate {Character Translation} URLs Windows
  700. {Check Links} Includes {Home Page Windows} Extend}
  701.  
  702. #
  703. # The menu.
  704. #
  705. # <B = control <I = option <U = shift <O = command <S = dynamic
  706.  
  707. proc htmlBuildMenu {{msg "Building HTML menu…"}} {
  708.     global htmlPackageToUse HTMLmodeVars htmlMenu
  709. # htmlPackageToUse must be set here. It's used globally in many places.
  710.     set htmlPackageToUse $HTMLmodeVars(htmlPackageToUse)
  711.     # Check if user used HTML 2.0!
  712.     if {[lsearch -exact {1 3} $htmlPackageToUse] < 0} {
  713.         set htmlPackageToUse 3
  714.         set HTMLmodeVars(htmlPackageToUse) 3
  715.         lappend modifiedModeVars {htmlPackageToUse HTMLmodeVars}
  716.     }
  717.     
  718.     if {$htmlPackageToUse == 1} {
  719.         htmlExtensions.tcl
  720.     } else {
  721.         html32.tcl
  722.     }
  723.     
  724.     if {[catch {htmlReadCache "HTML menu cache"}]} {
  725.         message $msg
  726.         htmlBuildMenu0
  727.     } else {
  728.         message "Reading HTML menu definition…"
  729.     }
  730.     insertMenu $htmlMenu
  731.  
  732.     htmlPackagesMenuExtra
  733.     htmlDisMark
  734.     # Disable Use Attrs menu if status bar isn't used.
  735.     if {![htmlUseAttrsIsEnabled]} {
  736.         enableMenuItem $htmlMenu "Use Attributes…" off
  737.     }
  738.     htmlBrowsersMenuExtra
  739. }
  740.  
  741. proc htmlBuildMenu0 {} {
  742.     global htmlCustomMenuList htmlPackageToUse modifiedModeVars htmlStartElements
  743.     global htmlMenu HTMLmodeVars htmlSpecialCharacter
  744.     global htmlCapCharSpecMenu htmlSpecialSymbCharacter
  745.     global htmlElemKeyBinding htmlMenuKey
  746.     global htmlSubMenus customHTMLpalettes
  747.     
  748.     set commonChars $HTMLmodeVars(commonChars)
  749.     # Build submenus
  750.     htmlReadMenuKeys
  751.     foreach me $htmlSubMenus {
  752.         set [lindex $me 0]Menu [htmlBuildOneMenu $me]
  753.     }
  754.     
  755.     
  756.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Browsers $BrowsersMenu]
  757.     append htmlMenuList " " [lindex $HTMLMenu 0]
  758.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Packages $PackagesMenu]
  759.     lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Preferences $PreferencesMenu]
  760.     # add custom pallettes if any
  761.     if {[info exists customHTMLpalettes]} {
  762.         lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n Palettes $customHTMLpalettes]
  763.     }
  764.     lappend htmlMenuList [lindex $HTMLMenu 1] "(-" [lindex $HTMLMenu 2]
  765.     for {set i $htmlStartElements} {$i < [llength $htmlSubMenus]} {incr i} {
  766.         lappend htmlMenuList [list menu -M HTML -p htmlMenuItem -m -n [lindex $htmlSubMenus $i] [set [lindex [lindex $htmlSubMenus $i] 0]Menu]]
  767.     }
  768.     
  769.     # Allow user to insert custom menu items    
  770.     if {[info exists htmlElemKeyBinding]} {
  771.         foreach elem [lsort [array names htmlElemKeyBinding]] {
  772.             lappend customMenuList "$htmlElemKeyBinding($elem)[string range $elem 0 0][string tolower [string range $elem 1 end]]"
  773.         }
  774.         set htmlCustomMenu [list menu -M HTML -p htmlMenuItem -m -n "Custom" $customMenuList]
  775.         lappend htmlMenuList $htmlCustomMenu
  776.     }
  777.     
  778.     # Show alert if user uses old way of defining custom elements.
  779.     if {[info exists htmlCustomMenuList]} {htmlNewElemVar}    
  780.     
  781.     # Character entities
  782.     set htmlSmallCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Small Chars" \
  783.     [lsort  [array names htmlSpecialCharacter]]]
  784.     set htmlCapCharsMenu [list menu -M HTML -p htmlMenuItem -m -c -n "Capital Chars" \
  785.     [lsort [array names htmlCapCharSpecMenu]]]
  786.     set htmlSymbCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Other Chars" \
  787.     [lsort [array names htmlSpecialSymbCharacter]]]    
  788.     set tmp $commonChars
  789.     if {[llength $commonChars]} {lappend tmp "(-"}
  790.     lappend tmp Add… Default Clear $htmlSmallCharsMenu $htmlCapCharsMenu $htmlSymbCharsMenu  
  791.     set htmlCharsMenu [list menu -M HTML -p htmlMenuItem -m -n "Character Entities" $tmp]
  792.     lappend htmlMenuList $htmlCharsMenu
  793.     
  794.     # Define menu
  795.     menu -M HTML -m  -p htmlMenuItem -n $htmlMenu $htmlMenuList
  796.     
  797.     set h {menu -M HTML -m  -p htmlMenuItem -n $htmlMenu}
  798.     lappend h $htmlMenuList
  799.     htmlSaveCache "HTML menu cache" $h
  800.     catch {unset htmlMenuKey}
  801. }
  802.  
  803.  
  804. proc htmlRebuildMenu {msg} {
  805.     htmlDeleteCache "HTML menu cache"
  806.     htmlBuildMenu $msg
  807. }
  808.  
  809. # Mark subpackages
  810. proc htmlPackagesMenuExtra {} {
  811.     global HTMLmodeVars
  812.     if {$HTMLmodeVars(hideNetscape)} {markMenuItem -m Packages "Hide Netscape Only" 1 }
  813.     if {$HTMLmodeVars(hideIE)} {markMenuItem -m Packages "Hide IE Only" 1 }
  814.     if {$HTMLmodeVars(hideStyleAttrs)} {markMenuItem -m Packages "Hide CSS Attributes" 1 }
  815. }
  816.  
  817. # Add browsers to Browser menu
  818. proc htmlBrowsersMenuExtra {} {
  819.     global HTMLmodeVars browserSig modifiedModeVars htmlBrowsers
  820.     if {[lsearch -exact $HTMLmodeVars(browsers) $browserSig] < 0} {
  821.         lappend HTMLmodeVars(browsers) $browserSig
  822.         lappend modifiedModeVars {browsers HTMLmodeVars}
  823.     }
  824.     set htmlBrowsers {}
  825.     set tmpbrws {}
  826.     foreach brws $HTMLmodeVars(browsers) {
  827.         if {![catch {nameFromAppl $brws} name]} {
  828.             set name [file tail $name]
  829.             lappend htmlBrowsers [list $brws $name]
  830.             lappend tmpbrws $brws
  831.             htmlAddBrowserItem $name $brws
  832.             if {$brws == $browserSig} {markMenuItem -m "Browsers" $name on }
  833.         } else {
  834.             lappend modifiedModeVars {browsers HTMLmodeVars}
  835.         }
  836.     }
  837.     set HTMLmodeVars(browsers) $tmpbrws
  838. }
  839.  
  840. # Mark and disable some stuff
  841. proc htmlDisMark {} {
  842.     global htmlPackageToUse
  843.     htmlDisableSome $htmlPackageToUse off
  844.     if {$htmlPackageToUse == 1} {
  845.         htmlMarkExt
  846.     } else {
  847.         htmlMark32
  848.     }
  849. }
  850.  
  851. proc htmlBuildUtilsMenu {{msg "Building HTML Utilities menu…"}} {
  852.     global htmlUtilsMenu
  853.  
  854.     if {[catch {htmlReadCache "HTML Utilities menu cache"}]} {
  855.         message $msg
  856.         htmlBuildUtilsMenu0
  857.     } else {
  858.         message "Reading HTML Utilities menu definition…"
  859.     }
  860.     insertMenu $htmlUtilsMenu
  861.     
  862.     htmlCharacterMenuExtra
  863.     htmlCheckMenuExtra
  864.     htmlURLsMenuExtra
  865.     htmlWindowsMenuExtra
  866.     htmlUtilDisMark
  867.  
  868. }
  869.  
  870. proc htmlRebuildUtilsMenu {msg} {
  871.     htmlDeleteCache "HTML Utilities menu cache"
  872.     htmlBuildUtilsMenu $msg
  873. }
  874.  
  875. proc htmlBuildUtilsMenu0 {} {
  876.     global htmlUtilSubMenus HTMLmodeVars htmlPackageToUse htmlUtilsMenu htmlMenuKey
  877.     # Build submenus
  878.     htmlReadMenuKeys
  879.     foreach me $htmlUtilSubMenus {
  880.         set [lindex $me 0]Menu [htmlBuildOneMenu $me]
  881.     }
  882.  
  883.     foreach me [lrange $htmlUtilSubMenus 1 end] {
  884.         lappend utilSubs [list menu -M HTML -p htmlMenuItem -m -n $me [set [lindex $me 0]Menu]]
  885.     }
  886.     
  887.     menu -M HTML -p htmlMenuItem -m \
  888.     -n $htmlUtilsMenu [concat [lrange  $UtilitiesMenu 0 3] "(-" \
  889.     $utilSubs "(-" [lrange $UtilitiesMenu 4 end]]
  890.     
  891.     set h {menu -M HTML -p htmlMenuItem -m -n $htmlUtilsMenu}
  892.     lappend h [concat [lrange  $UtilitiesMenu 0 3] "(-" \
  893.     $utilSubs "(-" [lrange $UtilitiesMenu 4 end]]
  894.     htmlSaveCache "HTML Utilities menu cache" $h
  895.     catch {unset htmlMenuKey}
  896. }
  897.  
  898. # Add some things to translation menu.
  899. proc htmlCharacterMenuExtra {} {
  900.     addMenuItem -m -l "" "Character Translation" "<>& -> HTML"
  901.     addMenuItem -m -l "" "Character Translation" "HTML -> <>&"
  902. }
  903.  
  904. # Check if Big Brother exists and if it should be used.
  905. proc htmlCheckMenuExtra {} {
  906.     global HTMLmodeVars modifiedModeVars
  907.     if {[catch {nameFromAppl Bbth}]} {
  908.         enableMenuItem "Check Links" "Use Big Brother" off
  909.         enableMenuItem "Check Links" "Check Remote Links" off
  910.         if {$HTMLmodeVars(useBigBrother)} {
  911.             set HTMLmodeVars(useBigBrother) 0
  912.             lappend modifiedModeVars {useBigBrother HTMLmodeVars}
  913.         }
  914.     } elseif {$HTMLmodeVars(useBigBrother)} {
  915.         markMenuItem -m {Check Links} {Use Big Brother} 1 
  916.     }
  917. }
  918.  
  919. # Disable URLs menu if cache is empty.
  920. proc htmlURLsMenuExtra {} {
  921.     global HTMLmodeVars
  922.     if {![llength $HTMLmodeVars(URLs)]} {htmlEnableURLs off}
  923. }
  924.  
  925. # Disable Windows menu if cache is empty.
  926. proc htmlWindowsMenuExtra {} {
  927.     global HTMLmodeVars
  928.     if {![llength $HTMLmodeVars(windows)]} {htmlEnablewindows off}
  929. }
  930.  
  931. # Mark and disable some stuff
  932. proc htmlUtilDisMark {} {
  933.     global htmlPackageToUse
  934.     htmlDisableSome $htmlPackageToUse off
  935.     if {$htmlPackageToUse == 1} {
  936.         htmlMarkExtUtil
  937.     } else {
  938.         htmlMark32Util
  939.     }
  940. }
  941.  
  942. proc htmlSetDis1 {} {
  943.     global HTMLmodeVars htmlDisabledItems1 htmlDisabledNetscape htmlDisabledIE
  944.     set htmlDisabledItems1 ""
  945.     if {$HTMLmodeVars(hideNetscape)} {append htmlDisabledItems1 " " $htmlDisabledNetscape}
  946.     if {$HTMLmodeVars(hideIE)} {append htmlDisabledItems1 " " $htmlDisabledIE}
  947. }
  948.  
  949. # Disabled menu items
  950. set htmlDisabledNetscape [list "Blocks and Dividers/Multi Column" \
  951. "Blocks and Dividers/Spacing" "Styles/Blinking" "Forms/Key Generator" "${htmlMenu}/Layers"]
  952. set htmlDisabledIE [list "Styles/Marquee" "Links/Sound"]
  953.  
  954. htmlSetDis1
  955.  
  956. set htmlDisabledItems3 [list "Packages/Hide Netscape Only" "Packages/Hide IE Only" \
  957. "Blocks and Dividers/Multi Column" \
  958. "Blocks and Dividers/Spacing" "Blocks and Dividers/No Line Break" \
  959. "Blocks and Dividers/Word Break" "Styles/Marquee" "Styles/Blinking" "Links/Object" \
  960. "Links/Sound" "${htmlMenu}/Plug-ins" "Tables/Head" "Tables/Body" \
  961. "Tables/Foot" "Tables/Column Group" "Tables/Column" "Forms/Button" "Forms/Key Generator" \
  962. "${htmlMenu}/Frames" "Java and JavaScript/Script" "Java and JavaScript/No Script" "${htmlMenu}/Layers"]
  963.